package ar.com.sistventa.form.proveedor;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;

import ar.com.sistventa.entities.Direccion;
import ar.com.sistventa.entities.Proveedor;
import ar.com.sistventa.form.proveedor.impl.AgregarModificarProveedorFormImpl;
import ar.com.sistventa.utils.Constantes;
import ar.com.sistventa.utils.ValidacionCampo;

public class AgregarModificarProveedorForm extends JDialog {

	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	private JTextField txtCodigo;
	private JTextField txtRazonSocial;
	private JTextField txtPersonaContacto;
	private JTextField txtCalle;
	private JTextField txtNumero;
	private JTextField txtProvincia;
	private JTextField txtLocalidad;
	private JTextField txtPais;
	private JTextField txtDeuda;
	private JTextPane txtObservacion;
	private JButton btnGuardar;
	private JButton btnModificar;

	private AgregarModificarProveedorFormImpl agregarModificarProveedorFormImpl;
	private Proveedor proveedor;
	private Integer tipoVentana;
	private JTextField txtCuit;
	private JTextField txtTelefono;
	private JTextField txtMail;
	private JTextField txtWeb;

	/**
	 * Create the dialog.
	 * 
	 * @wbp.parser.constructor
	 */
	public AgregarModificarProveedorForm(JDialog parent, Proveedor proveedor,
			int tipoVentana) {
		super(parent, true);
		this.proveedor = proveedor;
		this.tipoVentana = tipoVentana;
		agregarModificarProveedorFormImpl = new AgregarModificarProveedorFormImpl();
		initForm();
		inicializar();
	}

	public AgregarModificarProveedorForm(JFrame parent, Proveedor proveedor,
			int tipoVentana) {
		super(parent, true);
		this.proveedor = proveedor;
		this.tipoVentana = tipoVentana;
		agregarModificarProveedorFormImpl = new AgregarModificarProveedorFormImpl();
		initForm();
		inicializar();
	}

	private void initForm() {
		setBounds(100, 100, 574, 622);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);

		JPanel panelDescripcionProveedor = new JPanel();
		panelDescripcionProveedor.setBorder(new TitledBorder(new LineBorder(
				new Color(0, 0, 0)), " Proveedor ", TitledBorder.LEADING,
				TitledBorder.TOP, null, new Color(0, 0, 0)));
		panelDescripcionProveedor.setBounds(10, 10, 540, 310);
		contentPanel.add(panelDescripcionProveedor);
		panelDescripcionProveedor.setLayout(null);

		JLabel lblCodigo = new JLabel("Codigo:");
		lblCodigo.setBounds(15, 34, 46, 14);
		panelDescripcionProveedor.add(lblCodigo);

		JLabel lblRazonSocial = new JLabel("Razon Social:");
		lblRazonSocial.setBounds(254, 37, 70, 14);
		panelDescripcionProveedor.add(lblRazonSocial);

		JLabel lblNumero = new JLabel("Nro:");
		lblNumero.setBounds(255, 211, 46, 14);
		panelDescripcionProveedor.add(lblNumero);

		JLabel lblProvincia = new JLabel("Provincia:");
		lblProvincia.setBounds(255, 240, 60, 14);
		panelDescripcionProveedor.add(lblProvincia);

		txtProvincia = new JTextField();
		txtProvincia.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtProvincia, 28);
			}
		});
		txtProvincia.setBounds(315, 237, 150, 20);
		panelDescripcionProveedor.add(txtProvincia);
		txtProvincia.setColumns(10);

		txtNumero = new JTextField();
		txtNumero.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarSoloNumeros(e);
				ValidacionCampo.verificarLargoCamposJTextField(e, txtNumero, 6);
			}
		});
		txtNumero.setBounds(315, 207, 80, 20);
		panelDescripcionProveedor.add(txtNumero);
		txtNumero.setColumns(10);

		txtRazonSocial = new JTextField();
		txtRazonSocial.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtRazonSocial, 28);
			}
		});
		txtRazonSocial.setBounds(370, 31, 150, 20);
		panelDescripcionProveedor.add(txtRazonSocial);
		txtRazonSocial.setColumns(10);

		txtCodigo = new JTextField();
		txtCodigo.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtCodigo, 8);
			}
		});
		txtCodigo.setBounds(90, 30, 90, 20);
		panelDescripcionProveedor.add(txtCodigo);
		txtCodigo.setColumns(10);

		JLabel lblLocalidad = new JLabel("Localidad:");
		lblLocalidad.setBounds(15, 241, 64, 14);
		panelDescripcionProveedor.add(lblLocalidad);

		txtLocalidad = new JTextField();
		txtLocalidad.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtLocalidad, 28);
			}
		});
		txtLocalidad.setBounds(80, 237, 150, 20);
		panelDescripcionProveedor.add(txtLocalidad);
		txtLocalidad.setColumns(10);

		txtCalle = new JTextField();
		txtCalle.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtProvincia, 28);
			}
		});
		txtCalle.setBounds(80, 207, 150, 20);
		panelDescripcionProveedor.add(txtCalle);
		txtCalle.setColumns(10);

		JLabel lblCalle = new JLabel("Calle:");
		lblCalle.setBounds(15, 211, 60, 14);
		panelDescripcionProveedor.add(lblCalle);

		JLabel lblPais = new JLabel("Pais:");
		lblPais.setBounds(15, 272, 64, 14);
		panelDescripcionProveedor.add(lblPais);

		txtPais = new JTextField();
		txtPais.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtPais, 28);
			}
		});
		txtPais.setBounds(80, 267, 150, 20);
		panelDescripcionProveedor.add(txtPais);
		txtPais.setColumns(10);

		JLabel lblDireccion = new JLabel("Direccion");
		lblDireccion.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblDireccion.setBounds(15, 182, 65, 14);
		panelDescripcionProveedor.add(lblDireccion);

		JSeparator separator = new JSeparator();
		separator.setBounds(78, 189, 450, 6);
		panelDescripcionProveedor.add(separator);

		JLabel lblPersonaContacto = new JLabel("Persona de Contacto:");
		lblPersonaContacto.setBounds(255, 64, 117, 14);
		panelDescripcionProveedor.add(lblPersonaContacto);

		txtPersonaContacto = new JTextField();
		txtPersonaContacto.setBounds(370, 60, 150, 20);
		panelDescripcionProveedor.add(txtPersonaContacto);
		txtPersonaContacto.setColumns(10);

		JLabel lblCuit = new JLabel("CUIT:");
		lblCuit.setBounds(15, 64, 46, 14);
		panelDescripcionProveedor.add(lblCuit);

		txtCuit = new JTextField();
		txtCuit.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtCuit, 28);
				ValidacionCampo.validarCuit(e, txtCuit);
			}
		});
		txtCuit.setBounds(90, 60, 150, 20);
		panelDescripcionProveedor.add(txtCuit);
		txtCuit.setColumns(10);

		JLabel lblTelefono = new JLabel("Telefono:");
		lblTelefono.setBounds(15, 114, 64, 14);
		panelDescripcionProveedor.add(lblTelefono);

		txtTelefono = new JTextField();
		txtTelefono.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtTelefono, 28);
			}
		});
		txtTelefono.setBounds(90, 110, 108, 20);
		panelDescripcionProveedor.add(txtTelefono);
		txtTelefono.setColumns(10);

		JLabel lblMail = new JLabel("Mail:");
		lblMail.setBounds(243, 114, 46, 14);
		panelDescripcionProveedor.add(lblMail);

		txtMail = new JTextField();
		txtMail.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtMail, 58);
			}
		});
		txtMail.setBounds(299, 111, 190, 20);
		panelDescripcionProveedor.add(txtMail);
		txtMail.setColumns(10);

		JLabel lblWeb = new JLabel("Web:");
		lblWeb.setBounds(15, 144, 46, 14);
		panelDescripcionProveedor.add(lblWeb);

		txtWeb = new JTextField();
		txtWeb.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtWeb, 38);
			}
		});
		txtWeb.setBounds(90, 140, 399, 20);
		panelDescripcionProveedor.add(txtWeb);
		txtWeb.setColumns(10);

		JPanel panelDeuda = new JPanel();
		panelDeuda.setBorder(new TitledBorder(
				new LineBorder(new Color(0, 0, 0)), " Deuda ",
				TitledBorder.LEADING, TitledBorder.TOP, null,
				new Color(0, 0, 0)));
		panelDeuda.setBounds(10, 331, 540, 75);
		contentPanel.add(panelDeuda);
		panelDeuda.setLayout(null);

		JLabel lblDeuda = new JLabel("Deuda:");
		lblDeuda.setBounds(15, 34, 60, 14);
		panelDeuda.add(lblDeuda);

		txtDeuda = new JTextField();
		txtProvincia.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarSoloNumerosFloat(e);
				ValidacionCampo.verificarLargoCamposJTextField(e, txtDeuda, 8);
			}
		});
		txtDeuda.setBounds(60, 31, 65, 20);
		panelDeuda.add(txtDeuda);
		txtDeuda.setColumns(10);

		JPanel panelObervaciones = new JPanel();
		panelObervaciones.setBorder(new TitledBorder(new LineBorder(new Color(
				0, 0, 0)), " Observaciones ", TitledBorder.LEADING,
				TitledBorder.TOP, null, null));
		panelObervaciones.setBounds(10, 417, 540, 124);
		contentPanel.add(panelObervaciones);
		panelObervaciones.setLayout(null);

		txtObservacion = new JTextPane();
		txtObservacion.setBounds(10, 21, 520, 92);
		panelObervaciones.add(txtObservacion);

		btnGuardar = new JButton("Guardar");
		btnGuardar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonGuardar();
			}
		});
		btnGuardar.setBounds(10, 552, 91, 23);
		contentPanel.add(btnGuardar);

		btnModificar = new JButton("Modificar");
		btnModificar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonModificar();
			}
		});
		btnModificar.setBounds(113, 552, 91, 23);
		contentPanel.add(btnModificar);
	}

	private void inicializar() {
		if (tipoVentana == Constantes.AGREGAR) {
			setTitle("Nuevo Proveedor");
			btnModificar.setVisible(false);
			proveedor = new Proveedor();
		}
		if (tipoVentana == Constantes.MODIFICAR) {
			setTitle("Modificar Proveedor");
			btnModificar.setVisible(false);
			completarProveedor();
			habilitarCampos(true);
		}
		if (tipoVentana == Constantes.VER) {
			setTitle("Ver Proveedor");
			btnGuardar.setText("Aceptar");
			completarProveedor();
			habilitarCampos(false);
		}

	}

	private void habilitarCampos(boolean estado) {
		txtCodigo.setEnabled(estado);
		txtRazonSocial.setEnabled(estado);
		txtPersonaContacto.setEnabled(estado);
		txtCalle.setEnabled(estado);
		txtNumero.setEnabled(estado);
		txtLocalidad.setEnabled(estado);
		txtProvincia.setEnabled(estado);
		txtPais.setEnabled(estado);
		txtDeuda.setEnabled(estado);
		txtObservacion.setEnabled(estado);
	}

	private void completarProveedor() {
		txtCodigo.setText(proveedor.getCodigo());
		txtRazonSocial.setText(proveedor.getRazonSocial());
		txtCuit.setText(proveedor.getCuit());
		txtPersonaContacto.setText(proveedor.getPersonaContacto());
		txtTelefono.setText(proveedor.getTelefono());
		txtMail.setText(proveedor.getMail());
		txtWeb.setText(proveedor.getWeb());

		if (proveedor.getPersonaContacto() != null) {
			txtPersonaContacto.setText(proveedor.getPersonaContacto());
		}
		if (proveedor.getDireccion() != null) {
			txtCalle.setText(proveedor.getDireccion().getCalle());
			txtNumero.setText(String.valueOf(proveedor.getDireccion()
					.getNumero()));
			txtLocalidad.setText(proveedor.getDireccion().getLocalidad());
			txtProvincia.setText(proveedor.getDireccion().getProvincia());
			txtPais.setText(proveedor.getDireccion().getPais());
		}

		txtDeuda.setText(String.valueOf(proveedor.getDeuda()));
		txtObservacion.setText(proveedor.getObservacion());
	}

	private void eventoBotonGuardar() {
		if (tipoVentana == Constantes.VER) {
			this.setVisible(false);
			this.dispose();
		}

		String codigo = txtCodigo.getText().toUpperCase();
		String razonSocial = txtRazonSocial.getText().trim().toUpperCase();
		String cuit = txtCuit.getText().toUpperCase();
		String personaContacto = txtPersonaContacto.getText().trim()
				.toUpperCase();
		String telefono = txtTelefono.getText().trim().toUpperCase();
		String mail = txtMail.getText().trim();
		String web = txtWeb.getText().trim();
		String calle = txtCalle.getText().trim().toUpperCase();

		Integer numero = 0;
		try {
			numero = Integer.parseInt(txtNumero.getText().trim());
		} catch (Exception e) {
			numero = 0;
		}

		String localidad = txtLocalidad.getText().trim().toUpperCase();
		String provincia = txtProvincia.getText().trim().toUpperCase();
		String pais = txtPais.getText().trim().toUpperCase();

		Float deuda = 0F;
		try {
			deuda = Float.parseFloat(txtDeuda.getText().trim());
		} catch (Exception e) {
			deuda = 0F;
		}

		String observacion = txtObservacion.getText().toUpperCase();

		if (!codigo.trim().equals("") && !razonSocial.trim().equals("")) {
			proveedor.setCodigo(codigo);
			proveedor.setRazonSocial(razonSocial);
			proveedor.setCuit(cuit);
			proveedor.setPersonaContacto(personaContacto);
			proveedor.setTelefono(telefono);
			proveedor.setMail(mail);
			proveedor.setWeb(web);

			if (!calle.trim().equals("")) {
				Direccion direccion;
				direccion = new Direccion();
				direccion.setCalle(calle);
				direccion.setNumero(numero);
				direccion.setLocalidad(localidad);
				direccion.setProvincia(provincia);
				direccion.setPais(pais);
				proveedor.setDireccion(direccion);
			}

			proveedor.setDeuda(deuda);
			proveedor.setObservacion(observacion);

			if (tipoVentana == Constantes.AGREGAR) {
				agregarModificarProveedorFormImpl.agregarProveedor(proveedor);
				JOptionPane.showMessageDialog(this, "Se guardo el proveedor.",
						"Guardado", JOptionPane.INFORMATION_MESSAGE);
			}

			if (tipoVentana == Constantes.MODIFICAR) {
				agregarModificarProveedorFormImpl.modificarProveedor(proveedor);
				JOptionPane.showMessageDialog(this,
						"Se modifico el proveedor.", "Guardado",
						JOptionPane.INFORMATION_MESSAGE);
			}

			this.setVisible(false);
			this.dispose();

		}
	}

	private void eventoBotonModificar() {
		setTitle("Modificar Proveedor");
		btnModificar.setVisible(false);
		btnGuardar.setText("Guardar");
		completarProveedor();
		habilitarCampos(true);
		tipoVentana = Constantes.MODIFICAR;
	}
}
